package com.gopay.common.dss.lock;

import com.gopay.common.dss.DssException;

import java.util.concurrent.TimeUnit;

/**
 * Created by zhaojt on 2017/7/27.
 * 分布式锁接口定义
 */
public interface DssLock {

    /**
     * 申请分布式锁
     *
     * @param time  锁有效期，锁超时
     * @param unit  时间单位
     * @return  成功获取锁返回true， 在超时时间内未获取到锁返回false
     * @throws DssException 锁实现应满足在 1.中间件不可用 2.网络异常 等情况 抛出异常，以便业务方处理。
     */
    public boolean acquire(long time, TimeUnit unit) throws DssException;


    /**
     * 释放分布式锁
     * @throws DssException 锁实现应满足在 1.中间件不可用 2.网络异常 3. 事务超时(本地事务执行时间 > 锁有效期时)等情况 抛出异常，以便业务方处理。
     */
    public void release() throws DssException;
}
